package f.h.dragon.programmingPearls;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import f.h.dragon.util.CloseableUtil;
import f.h.dragon.util.RandomUtil;
import static f.h.dragon.util.OutUtil.*;

/**
 * SortN: 对N个不重复随机数排序，Programming Pearls - Chapter 1
 * 
 * 问题描述： 输入：一个最多包含n个正整数的文件，每个数都小于n，其中n=10^7。如果在输入文件中有任何整数，重复
 * 出现就是致命错误。没有其他数据与该整数相关联 输出：按升序排列的输入整数的列表
 * 约束：最多有（大约）1MB的内存空间可用，有充足的磁盘存储空间可用。运行时间最多几分钟，最佳为10s
 * 
 * @author Wenlong Meng(wenlong.meng@gmail.com)
 * @version 1.0 at 2012/02/05
 * @since 1.0
 */
public class SortN {

	/**
	 * 生成随机数文件
	 */
	public static void makeRandoms() {
		long st = System.nanoTime();
		// 生成随机数
		int min = 0, max = 10000000, count = 10000000;
		int[] randoms = RandomUtil.randoms(min, max, count);
		outln("make randoms: " + (System.nanoTime() - st));
		DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
		String stime = df.format(new Date());
		String file = "/datas/fhdragon/programmingPearls/randoms" + count + "_" + stime + ".fh";
		FileWriter out = null;
		try {
			out = new FileWriter(new File(file));
			for(int i : randoms){
				out.append(i + "");//写入数据
//				out.append(i + "\n");//写入数据
			}			
			outln("writer randoms: " + (System.nanoTime() - st));
		} catch (IOException e) {
			throw new RuntimeException(e);
		}finally{
			CloseableUtil.close(out);
		}
	}

}
